package com.pig.service.impl;

import com.pig.dto.CartItemDTO;
import com.pig.entity.CartItem;
import com.pig.entity.Product;
import com.pig.mapper.CartItemMapper;
import com.pig.mapper.ProductMapper;
import com.pig.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 购物车服务实现类
 */
@Service
public class CartServiceImpl implements CartService {
    
    @Autowired
    private CartItemMapper cartItemMapper;
    
    @Autowired
    private ProductMapper productMapper;
    
    @Override
    public CartItem addToCart(Long userId, CartItemDTO cartItemDTO) {
        // 检查商品是否存在
        Product product = productMapper.selectById(cartItemDTO.getProductId());
        if (product == null) {
            throw new RuntimeException("商品不存在");
        }
        
        // 检查库存
        if (product.getStock() < cartItemDTO.getQuantity()) {
            throw new RuntimeException("商品库存不足");
        }
        
        // 检查购物车中是否已存在该商品
        CartItem existingItem = cartItemMapper.selectByUserIdAndProductId(userId, cartItemDTO.getProductId());
        
        if (existingItem != null) {
            // 更新数量
            existingItem.setQuantity(existingItem.getQuantity() + cartItemDTO.getQuantity());
            existingItem.setUpdateTime(LocalDateTime.now());
            cartItemMapper.update(existingItem);
            return existingItem;
        } else {
            // 新增购物车项
            CartItem cartItem = new CartItem();
            cartItem.setUserId(userId);
            cartItem.setProductId(cartItemDTO.getProductId());
            cartItem.setQuantity(cartItemDTO.getQuantity());
            cartItem.setPrice(product.getPrice());
            cartItem.setCreateTime(LocalDateTime.now());
            cartItem.setUpdateTime(LocalDateTime.now());
            
            cartItemMapper.insert(cartItem);
            return cartItem;
        }
    }
    
    @Override
    public List<CartItem> getCartItems(Long userId) {
        return cartItemMapper.selectByUserId(userId);
    }
    
    @Override
    public CartItem updateQuantity(Long userId, Long cartItemId, Integer quantity) {
        CartItem cartItem = cartItemMapper.selectById(cartItemId);
        if (cartItem == null || !cartItem.getUserId().equals(userId)) {
            throw new RuntimeException("购物车项不存在");
        }
        
        // 检查库存
        Product product = productMapper.selectById(cartItem.getProductId());
        if (product.getStock() < quantity) {
            throw new RuntimeException("商品库存不足");
        }
        
        cartItem.setQuantity(quantity);
        cartItem.setUpdateTime(LocalDateTime.now());
        cartItemMapper.update(cartItem);
        
        return cartItem;
    }
    
    @Override
    public boolean removeFromCart(Long userId, Long cartItemId) {
        CartItem cartItem = cartItemMapper.selectById(cartItemId);
        if (cartItem == null || !cartItem.getUserId().equals(userId)) {
            return false;
        }
        
        return cartItemMapper.deleteById(cartItemId) > 0;
    }
    
    @Override
    public boolean clearCart(Long userId) {
        return cartItemMapper.deleteByUserId(userId) > 0;
    }
    
    @Override
    public int getCartItemCount(Long userId) {
        List<CartItem> cartItems = cartItemMapper.selectByUserId(userId);
        return cartItems.stream().mapToInt(CartItem::getQuantity).sum();
    }
} 